import { DataSourceOptions } from "typeorm";
import { KoaApplication } from "@/types/index";
import { MyApplication } from "./application";

class ApplicationFactory extends MyApplication {
  constructor() {
    super();
  }

  // 第三方插件中间件加载配置
  plugin(fn: (arg0: KoaApplication) => void) {
    fn(this.server());
  }
  // 本地中间件开发
  middleware(fn?: (arg0: KoaApplication) => void) {
    if (fn) {
      fn(this.server());
    }
  }
  // 设置路由前缀
  setGlobalPrefix(prefix: string) {
    this.prefix = prefix;
  }

  // 加载实例module 调用必须在 plugin 、middleware 之后调用
  module(Module: any) {
    this.setup(Module);
    // new Module(this.App);
  }

  // 连接 typeorm 数据库
  typeorm(options: DataSourceOptions) {
    this.createDataSource(options);
  }
  // 连接 redis 数据库
  redis() {}
  // 监听端口 启动服务器
  listen(port: number, callback?: any) {
    this.server().listen(port, callback);
  }
}

export const AppFactory = new ApplicationFactory();
